package com.jt.sys.service.impl;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.jt.common.exception.ServiceException;
import com.jt.common.vo.CheckBox;
import com.jt.common.vo.PageObject;
import com.jt.sys.dao.SysRoleDao;
import com.jt.sys.dao.SysRoleMenuDao;
import com.jt.sys.dao.SysUserRoleDao;
import com.jt.sys.entity.SysRole;
import com.jt.sys.service.SysRoleService;

@Service
public class SysRoleServiceImpl implements SysRoleService {

	@Autowired
	private SysRoleDao sysRoleDao;
	@Autowired
	private SysRoleMenuDao sysRoleMenuDao;
	@Autowired
	private SysUserRoleDao sysUserRoleDao;
	@Override
	public int saveObject(SysRole entity, Integer[] menuIds) {
		// 参数有消息验证
		if (entity == null)
			throw new IllegalArgumentException("保存对象不能为空");
		if (menuIds == null || menuIds.length == 0)
			throw new IllegalArgumentException("必须为角色赋予权限");
		// 保存数据

		entity.setCreatedTime(new Date());
		entity.setModifiedTime(new Date());
		entity.setCreatedUser("admin");
		entity.setModifiedUser("admin");
		int rows = sysRoleDao.insertObject(entity);
		// entity.getId()要想拿到这个id必须在mapper里面配置propertykey=id
		sysRoleMenuDao.insertObject(entity.getId(), menuIds);

		// 返回结果
		return 0;
	}

	@Override
	public int deleteObject(Integer id) {
		// 参数合法性验证
		if (id == null || id < 1) {
			throw new IllegalArgumentException("参数不合法");
		}
		// 基于id执行删除操作
		int rows = sysRoleDao.deleteObject(id);

		// 对删除结果进行校验
		if (rows == 0) {
			throw new ServiceException("此记录可能已经不存在");
		}
		sysRoleMenuDao.deleteObjectByRoleId(id);
		sysUserRoleDao.deleteObjectsByRoleId(id);
		// 返回结果
		return rows;
	}

	@Override
	public PageObject<SysRole> findPageObjects(String name, Integer pageCurrent) {
		// 参数验证(只用验证pageCurrent，name不用验证，可以随意输入）
		if (pageCurrent == null || pageCurrent < 1)
			throw new IllegalArgumentException("当前页码有误");
		// 执行查询(基于条件查询总记录数)
		int rowCount = sysRoleDao.getRowCount(name);
		if (rowCount == 0)
			throw new ServiceException("所查询的数据不存在");// return null;
		// 执行查询（基于条件查询当页记录）
		Integer pageSize = 2;
		Integer startIndex = (pageCurrent - 1) * pageSize;
		List<SysRole> list = sysRoleDao.findPageObjects(name, startIndex, pageSize);
		// 构建PageObject对象
		PageObject<SysRole> pb = new PageObject<>();
		pb.setPageCurrent(pageCurrent);
		pb.setPageSize(pageSize);
		pb.setRowCount(rowCount);
		pb.setRecords(list);

		return pb;
	}

	@Override
	public Map<String, Object> findObjectById(Integer id) {
		// 1.合法性验证
		if (id == null || id <= 0)
			throw new ServiceException("id的值不合法");
		// 2.执行查询
		SysRole sysRole = sysRoleDao.findObjectById(id);
		List<Integer> menuIds = sysRoleMenuDao.findMenuIdsByRoleId(id);
		System.out.println(menuIds);
		// 3.验证结果并返回
		if (sysRole == null)
			throw new ServiceException("此对象已经不存在");
		if (menuIds == null)
			throw new ServiceException("角色与菜单记录不存在");
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("role", sysRole);
		map.put("menuIds", menuIds);
		return map;
	}

	@Override
	public int updateObject(SysRole entity, Integer[] menuIds) {
	 	//1.合法性验证
    	if(entity==null)
        throw new IllegalArgumentException("更新的对象不能为空");
    	if(menuIds==null||menuIds.length==0)
    	throw new IllegalArgumentException("id的值不能为空");
    	
    	
    	//2.更新数据
    	int rows=sysRoleDao.updateObject(entity);
    	if(rows==0)
    throw new ServiceException("此记录可能已经不存在");
    	sysRoleMenuDao.deleteObjectByRoleId(entity.getId());
    	sysRoleMenuDao.insertObject(entity.getId(),menuIds);
    	entity.setModifiedTime(new Date());
    	//3.返回结果
    	return rows;
	}

	@Override
	public List<CheckBox> findRoles() {
		
		return sysRoleDao.findRoles();
	}

	/*
	 * @Override public PageObject<SysRole> findPageObjects( String name,
	 * Integer pageCurrent) { //1.验证参数合法性 //1.1验证pageCurrent的合法性，
	 * //不合法抛出IllegalArgumentException异常 if(pageCurrent==null||pageCurrent<1)
	 * throw new IllegalArgumentException("当前页码不正确"); //2.基于条件查询总记录数 //2.1) 执行查询
	 * int rowCount=sysRoleDao.getRowCount(name); //2.2) 验证查询结果，假如结果为0不再执行如下操作
	 * if(rowCount==0)return null; //3.基于条件查询当前页记录(pageSize定义为2)
	 * //3.1)定义pageSize int pageSize=2; //3.2)计算startIndex int
	 * startIndex=(pageCurrent-1)*pageSize; //3.3)执行当前数据的查询操作 List<SysRole>
	 * records= sysRoleDao.findPageObjects(name, startIndex, pageSize);
	 * //4.对分页信息以及当前页记录进行封装 //4.1)构建PageObject对象 PageObject<SysRole>
	 * pageObject=new PageObject<>(); //4.2)封装数据
	 * pageObject.setPageCurrent(pageCurrent); pageObject.setPageSize(pageSize);
	 * pageObject.setRowCount(rowCount); pageObject.setRecords(records);
	 * //5.返回封装结果。 return pageObject; }
	 */

}
